游客发表
智东西作者|王涵编辑|李水青
智东西4月15日报道,今天,“AI教母”李飞飞的世界模型团队World Labs开源了动态3D高斯泼溅(3DGS)渲染器Spark 2.0。
![]()
▲Spark 2.0官宣开源(来源:X)
李飞飞本人在该成果发布的第一时间评论称:“Spark 2.0现在可以在任意设备上流式传输超过1亿个高斯泼溅!能够为基于网页的3DGS渲染开源生态做出贡献,我们感到无比自豪!”
![]()
▲李飞飞评论(来源:X)
Spark系列模型于去年首次发布,是一个专为网页构建的动态3D高斯泼溅(3DGS)渲染器。它与网页端最流行的3D框架THREE.js集成,并利用WebGL2在任意带有网页浏览器的设备上运行,包括桌面端、iOS、Android以及VR设备。
与上一版本相比,Spark 2.0新增了一套细节层级(LoD)系统,能够在任意设备上流式传输并渲染超大规模的3DGS世界。
▲在儿童房间里自由探索,物品细节清晰(来源:World Labs博客)
此外,新版还使用了.RAD的3DGS文件格式,支持渐进式细化的流式传输,而虚拟泼溅分页系统则通过固定的GPU内存分配,实现了对无限泼溅世界的访问,通俗来讲就是可以渲染无限大的3D场景。
![]()
▲草原中的洞穴小屋,场景转换无畸变(来源:World Labs博客)
如此流畅连贯的效果是怎么实现的?针对大规模场景的扩展难题,Spark 2.0运用了3项图形学与系统底层方案:细节层次优化、渐进式流式加载以及虚拟显存管理。
李飞飞团队在博客中,对Spark 2.0背后的三项技术进行了十分详细的展开,具体如下:
一、采取连续式细节层级,稳定渲染百万级泼溅
在计算机图形学中,处理大型3D场景时常常采用细节层级系统,该系统会根据物体与观察者之间的距离自动调整渲染的细节程度,
不同的细节层级方法介于离散式与连续式之间,形成一个技术谱系。采用离散式细节层级(LoD,Level-of-Detail)时,系统需要为泼溅效果制作多个版本,从精简到精细依次递增,再根据各版本的近似边界与相机的距离,在不同版本间进行切换。
Spark的早期系统设计支持离散模式,但其存在明显缺陷:当用户在场景中移动、不同版本突然切换时,画面会出现明显的跳变;此外,将泼溅效果按区块分组后,用户还能看到清晰的边界痕迹。
Spark 2.0的LoD设计采用了一种连续式LoD方法,所有泼溅都存在于一个层级结构中,即LoD泼溅树。Spark 2.0会沿着树的一个边界切割面单独选取泼溅,从而在视口内优化泼溅的细节。
![]()
▲LoD泼溅树(来源:World Labs博客)
树中的每个内部节点都是其子节点的一个低分辨率版本,通过将子节点的多个泼溅合并成一个新的泼溅来近似表示子节点泼溅的形状和颜色。这个过程一直持续到树的根节点——一个单一的、大的泼溅,它聚合了该物体中所有泼溅的整体形状和颜色。
利用这棵LoD泼溅树,Spark 2.0会计算出穿过该树的一个“切片”,从而为当前视口选取最佳的N个泼溅进行渲染。通过设置一个最大泼溅预算N(根据设备类型不同,通常在50万到250万个泼溅之间),系统确保每帧只需渲染恒定数量的泼溅,从而获得稳定、高帧率的渲染性能。通过上下调整N值,即可在帧率和泼溅细节之间进行权衡。
![]()
▲公园中的自行车,细节真实,前后一致性强(来源:World Labs博客)
Spark 2.0通过同时遍历多个LoD泼溅树实例,对该算法进行了进一步扩展。与仅从单一根节点开始遍历不同,针对每个3DGS物体,拓展后的算法会将其屏幕尺寸及泼溅节点 (dm0,Sm0) 一同加入初始优先队列,后续流程与原有逻辑保持一致,可在场景中所有3DGS物体上同步筛选需细化的细节层级。
这一设计让大规模组合世界的创建变得简单高效:只需在空间任意位置添加3DGS LoD物体,Spark 2.0便能自动计算出每帧需渲染的所有LoD泼溅的最优全局子集。
二、设计新型文件格式,大场景3D世界在网页上秒开
Spark2.0定义了一种新的文件格式.RAD(代表RADiance场),该格式能够压缩3DGS数据,并支持随机访问流式传输,从而在数据通过网络传输时实现渐进式细化。
目前最常见的两种3DGS数据文件格式是.PLY和.SPZ,它们代表了两种不同的数据编码方式:行式存储和列式存储。
.PLY文件是按行顺序存储的,在接收到数据后立即显示泼溅,从而实现渐进式加载。但它未经过压缩,且编码精度存在浪费。.SPZ文件将相似类型的数据按列顺序存储在一起,从而获得了更好的压缩率。但遗憾的是,它无法实现渐进式加载,因为在任何泼溅获得其所有属性之前,必须接收完整的文件。
为实现3DGS数据的高效压缩与流式传输,李飞飞团队设计了全新的.RAD文件格式。该格式编解码简洁、扩展性强、编码精度可调节,同时支持随机访问。
![]()
▲.RAD文件格式(来源:World Labs博客)
文件结构十分清晰:以RAD0文件头开头,随后依次为头部元数据长度、元数据JSON,以及一个或多个各含6.4万个泼溅的数据块。头部元数据记录了所有数据块的偏移地址与字节大小,支持任意顺序读取数据块内容。
单个数据块也采用相似结构:以RADC块头起始,接着是块元数据长度、元数据JSON,最后为该6.4万个泼溅的压缩数据。泼溅各项属性按列存储,可分别选用自定义编码方式。同类数据集中存放,再通过Gzip压缩,能获得出色的压缩率。
头部采用JSON编码,可通过版本字段与新增可选字段保障后续扩展。数据类型编码与压缩算法均以字符串名称在元数据中指定,方便后续扩展新类型。
三、采用虚拟内存,开辟1600万泼溅固定显存池
虚拟内存是一项内存管理技术,它以固定大小的物理内存为基础,向程序提供大容量的虚拟地址空间,并通过页表以固定尺寸的页为单位,完成虚拟地址与物理地址的映射。
Spark 2.0将这一思路应用到3DGS渲染中。具体来讲,李飞飞团队在GPU上开辟了一块可容纳1600万个泼溅的固定显存池,自动管理GPU中每6.4万个泼溅为一页的“显存页”,与.RAD文件中对应大小的虚拟数据块之间的映射。
![]()
▲虚拟内存(来源:World Labs博客)
数据块会按照LoD遍历顺序加载到空闲页面中;当页表占满,且新数据块优先级更高时,系统会按最近最少使用(LRU)策略淘汰旧数据。
Spark 2.0支持同时加载多个.RAD文件并共用同一张页表。对每个文件,系统会记录数据块到页表的映射,以及页表到对应文件与数据的反向映射。
在遍历多棵LoD泼溅树时,引擎会记录数据块与文件的访问顺序,形成全局统一的优先级排序,进而对场景中所有3DGS物体的泼溅加载与存储进行统一优化。
结语:Spark 2.0降低空间智能的创作门槛,争夺基础设施定义权
从2025年的首次亮相到今日的2.0版本迭代,Spark的进化轨迹某种程度上也映射着3DGS这一技术的成熟曲线。
三维内容的交付长期以来被两座大山压着:一是资产太重,动辄GB级的文件让网页端望而却步;二是渲染太贵,高端GPU才能流畅运行的场景,手机浏览器只能围观。
Spark 2.0通过连续LoD、.RAD格式和虚拟显存“三板斧”,让高质量三维内容像普通图片和视频一样,在互联网上自由流动、即点即看。
李飞飞团队选择将该技术开源,降低了空间智能的创作门槛,同样也是在争夺下一代空间内容基础设施的定义权。
{loop type="link" row=1 }{$vo.title}